package main.java.indi.zyj.interviews;


import main.java.indi.zyj.hot100.base.TreeNode;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Description
 * @author zyj
 * @date 2024/05/07 18:51
 */
public class interviews {

    public int maxProduct (int[] nums) {
        // write code here
        if (nums == null || nums.length == 0) {
            return 0;
        }

        int maxProd = nums[0];
        int minProd = nums[0];
        int maxRes = nums[0];

        for (int i = 1; i < nums.length; i++) {

            if (nums[i] < 0) {
                int temp = maxProd;
                maxProd = minProd;
                minProd = temp;
            }

            maxProd = Math.max(nums[i], maxProd * nums[i]);
            minProd = Math.min(nums[i], minProd * nums[i]);

            maxRes = Math.max(maxProd, maxRes);
        }

        return maxRes;

    }

//    public TreeNode buildTree (int[] inorder, int[] postorder) {
//        // write code here
//        if (inorder == null || postorder == null) {
//            return null;
//        }
//        int length = inorder.length;
//        return build(inorder, 0, length - 1, postorder, 0, length - 1);
//    }
//
//    private TreeNode build(int[] inorder, int inStart, int inEnd, int[] postorder, int postStart, int postEnd) {
//        if (inStart > inEnd || postStart > postEnd) {
//            return null;
//        }
//        int rootVal = postorder[postEnd];
//        TreeNode root = new TreeNode(rootVal);
//        int rootIndex = findIndex(inorder, rootVal, inStart, inEnd);
//        root.left = build(inorder, inStart, rootIndex - 1, postorder, postStart, postStart + rootIndex - inStart - 1);
//        root.right = build(inorder, rootIndex + 1, inEnd, postorder, postStart + rootIndex -inStart, postEnd - 1);
//        return root;
//    }
//
//    private int findIndex(int[] inorder, int rootVal, int inStart, int inEnd) {
//        for (int i = inStart; i <= inEnd; i++) {
//            if (inorder[i] == rootVal) {
//                return i;
//            }
//        }
//        return -1;
//    }

//    Map<Integer, Integer> lru = null;
//    List<Integer> sort;
//    int cap;
//
//    public Solution(int capacity) {
//        // write code here
//        lru = new HashMap<>();
//        sort = new ArrayList<>(capacity);
//        cap = capacity;
//    }
//
//    public int get(int key) {
//        // write code here
//        Integer val = lru.get(key);
//        if (val != null) {
//            sort.remove((Integer) key);
//            sort.add(0, key);
//            return val;
//        } else {
//            return -1;
//        }
//    }
//
//    public void set(int key, int value) {
//        // write code here
//        if (lru.containsKey(key)) {
//            lru.put(key, value);
//            sort.remove((Integer) key);
//            sort.add(0, key);
//        } else {
//            if (lru.size() == cap) {
//                int last = sort.get(cap - 1);
//                sort.remove(cap - 1);
//                lru.remove(last);
//            }
//            lru.put(key, value);
//            sort.add(0, key);
//        }
//    }




}
